// 主应用文件
const express = require('express');
const cors = require('cors');
const path = require('path');
const routes = require('./routes');
const { sequelize, syncDatabase } = require('./models');
// 加载环境变量
require('dotenv').config();

// 创建Express应用
const app = express();

// 增强CORS配置，允许所有域名访问，支持跨域请求
app.use(cors({
  origin: '*', // 允许所有来源访问，生产环境中应该限制为特定域名
  methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
  allowedHeaders: ['Origin', 'Content-Type', 'Authorization', 'Accept'],
  credentials: true,
  maxAge: 86400 // 预检请求结果缓存24小时
}));

// 处理OPTIONS请求
app.options('*', cors()); // 对所有路由应用CORS
// 增加请求体大小限制，支持更大的图片上传
app.use(express.json({ limit: '50mb' })); // 解析JSON请求体，最大50MB
app.use(express.urlencoded({ extended: true, limit: '50mb' })); // 解析表单数据，最大50MB

// 静态文件服务
app.use('/uploads', express.static(path.join(__dirname, 'uploads')));

// 加载路由
app.use('/', routes);

// 错误处理中间件
app.use((err, req, res, next) => {
  console.error('错误处理:', err);
  res.status(500).json({
    success: false,
    message: err.message || '服务器内部错误'
  });
});

// 404处理
app.use((req, res) => {
  res.status(404).json({
    success: false,
    message: 'API端点不存在'
  });
});

// 启动服务器 - 使用环境变量配置的主机地址，默认监听所有网络接口
const PORT = process.env.SERVER_PORT || 3000;
const HOST = process.env.SERVER_HOST || '0.0.0.0'; // 优先使用环境变量中的主机地址，默认监听所有网络接口

// 初始化数据库并启动服务器
const startServer = async () => {
  try {
    // 同步数据库表结构
    await syncDatabase();
    
    // 启动服务器
    app.listen(PORT, HOST, () => {
      console.log(`服务器运行在 http://${HOST}:${PORT}`);
    });
  } catch (error) {
    console.error('服务器启动失败:', error);
  }
};

// 启动服务器
startServer();